package com.smh.a01dianmingqiDemo1;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class Test5 {
    public static void main(String[] args) throws IOException {

//TxT文件中事先准备好一些学生信息，每个学生的信息独占一行。要求1:每次被点到的学生，再次被点到的概率在原先的基础上降低一半。举例:80个学生，点名5次，每次都点到小A，概率变化情况如下:
//第一次每人概率:1.25%。
//第二次小A概率:0.625%。
//第三次小A概率:0.3125%。
//第四次小A概率:0.15625%。
//第五次小A概率:0.078125%。
//其他学生概率:1.2579%
//其他学生概率:1.261867%
//其他学生概率:1.2638449%
//其他学生概率:1.26483386%
//提示:本题的核心就是带权重的随机

        File file = new File("day28-code\\file\\names3.txt");

        ArrayList<Student> list = new ArrayList<>();

        BufferedReader br = new BufferedReader(new FileReader(file));

        String s;
        while ((s = br.readLine()) != null) {
            String[] split = s.split("-");
            list.add(new Student(split[0], split[1], Integer.parseInt(split[2]), Double.parseDouble(split[3])));
        }
        br.close();

        System.out.println(list);
        //权重总和
        double weight = 0;
        for (Student student : list) {
            weight += student.getWeight();
        }
        //计算每个人的实际占比
        double[] arr = new double[list.size()];
        for (int i = 0; i < list.size(); i++) {
            arr[i] = list.get(i).getWeight() / weight;
        }
        //计算每个人的权重范围
        for (int i = 1; i < arr.length; i++) {
            arr[i] = arr[i - 1] + arr[i];
        }

        System.out.println(Arrays.toString(arr));

        //获取一个0.0~1.0之间的随机数
        double number = Math.random();
        System.out.println(number);
        //判断number在arr中的位置
        //二分查找法
        //找不到返回-插入点-1
        int i = -Arrays.binarySearch(arr, number);
        if (i < 0) {
            i = -(i + 1);
        }
        System.out.println(i);
        Student student = list.get(i);
        System.out.println(student);

        //修改当前学生的权重
        double w = student.getWeight();
        student.setWeight(w / 2);

        //把集合信息写回文件
        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
        for (Student student1 : list) {
            String s1 = student1.getName() + "-" + student1.getGender() + "-" + student1.getAge() + "-" + student1.getWeight();
            bw.write(s1);
            bw.newLine();
        }
        bw.close();

    }
}
